package com.sunyur.tailor.channel.service.inner.settle.param;

import lombok.Data;

import java.math.BigDecimal;
import java.util.List;

/**
 * @Description 外部创建应付流水请求参数
 * @Author XuHui
 * @Date 2022/4/26 16:14
 * @Version 1.0
 */
@Data
public class SettleItemCreateParam {

    /**
     * 申请人
     */
    private String operatorCode;
    /**
     * 供应商编码
     */
    private String supplierCode;
    /**
     * 必填，0:（收货，退货）,4:索赔 5:返利
     */
    private int sourceType;
    /**
     * 币种
     */
    private String currency;

    private List<SettleItems> settleItems;

    /**
     * 应付流水集合
     */
    @Data
    public static class SettleItems {
        /**
         * 必填：流水外部编号（全局唯一）
         */
        private String purCode;
        /**
         * 有物料编码传：1，无物料编码传：4
         */
        private Integer type;
        /**
         * 物料编码
         */
        private String goodsCode;
        /**
         * 标的物信息 如果是自定义类型必传
         */
        private BusinessGoods businessGoods;
        /**
         * 必填 ：行类型编码
         */
        private String itemTypePurCode;
        /**
         * 必填 ：金额正负标识不能为空（金额为正，1为负则0）
         */
        private Integer plusMinus;
        /**
         * 必填 ：数量
         */
        private BigDecimal count;
        /**
         * 必填 ：含税单价
         */
        private BigDecimal taxPrice;
        /**
         * 必填 ：不含税单价
         */
        private BigDecimal untaxedPrice;
        /**
         * 必填 ：含税总价
         */
        private BigDecimal amount;
        /**
         * 必填 ：不含税总价
         */
        private BigDecimal untaxedAmount;
        /**
         * 必填 ：税码
         */
        private String taxCode;
        /**
         * 必填 ：付款方式  (数字)
         * //1: 银行转账
         * BANK_TRANSFER(1, "银行转账"),
         * //2: 电汇
         * WIRE_TRANSFER(2, "电汇"),
         * //3: 现金
         * CASH(3, "现金"),
         * //4: 银行承兑汇票
         * BANK_ACCEPTANCE(4, "银行承兑汇票"),
         * //5: 商业承兑汇票
         * TRADE_ACCEPTANCE(5, "商业承兑汇票"),
         * //6: 其他
         * OTHER(6, "其他"),
         * //7: 支票
         * CHECK(7, "支票"),
         * //平台付款方式
         * PLATFORM_PAY_WAY(10002,"平台付款方式"),
         * //公司支付宝-受票方
         * COMPANY_ALIPAY_DRAWEE(10003,"公司支付宝-受票方"),
         * //公司支付宝-非受票方
         * COMPANY_ALIPAY_NON_DRAWEE(10004,"公司支付宝-非受票方"),
         * //银行汇票
         * BANK_TRANSFER_INVOICE(10006, "银行汇票"),
         */
        private String payType;
        /**
         * 必填，结算主体编码
         */
        private String purchaserCompanyCode;
        /**
         * 必填，收票地址信息
         */
        private InvoiceAddressInfo invoiceAddressInfo;
        /**
         * 必填，来源单号
         */
        private String sourceCode;
        /**
         * 必填，采购员编码
         */
        private String agentCode;
        /**
         * 必填，创建人编码
         */
        private String creatorCode;
        /**
         * 必填，收票人编码
         */
        private String invoiceReceiverCode;
        /**
         * 必填，开票类型（数字）
         * 增值税普通发票
         * GENERAL(0),
         * //增值税专用发票
         * VAT(1),
         * // 2已定义，不能使用
         * //形式发票
         * PROFORMA(10),
         * //区块链发票
         * BLOCKCHAIN(11),
         */
        private Integer invoiceType;

        /**
         * 标的物信息 如果是自定义类型必传
         */
        @Data
        public static class BusinessGoods {
            /**
             * 标的物名称
             */
            private String name;
        }

        @Data
        public static class InvoiceAddressInfo {
            /**
             * 收货省编码（一级地址编码）
             */
            private String provinceCode;

            /**
             * 收货省（一级地址名称）
             */
            private String provinceName;

            /**
             * 收货市编码（二级地址编码）
             */
            private String cityCode;

            /**
             * 收货市（二级地址名称）
             */
            private String cityName;

            /**
             * 收货区/县编码（三级地址编码）
             */
            private String countyCode;

            /**
             * 收货区/县（三级地址名称）
             */
            private String countyName;

            /**
             * 收货街道编码（四级地址编码）
             */
            private String townCode;

            /**
             * 收货街道（四级地址名称）
             */
            private String townName;

            /**
             * 详细地址
             */
            private String address;

            /**
             * 姓名
             */
            private String name;

            /**
             * 手机号
             */
            private String mobile;
            /**
             * 地址内部编码
             */
            private String code;
            /**
             * 地址外部编码
             */
            private String purCode;
            /**
             * 地址简称
             */
            private String addressShortName;
            /**
             * 邮政编码
             */
            private String postalCode;

        }

    }
}
